The early phases of computer or processor system operation (i.e., prior to execution of an operating system by the processor system) following a power up or reset are controlled by a basic input/output system (BIOS). In general, the BIOS is implemented as software or machine readable instructions that are stored in a non-volatile memory coupled to a processor, which executes the BIOS instructions following a reset operation or the application of power. Typically, the BIOS performs one or more hardware and software configuration and test activities prior to executing the operating system. The configuration activities are responsible for establishing the manner in which hardware devices (e.g., disk drives, video controllers, keyboard interfaces, etc.) associated with the processor system interact with the operating system executed by the processor system. The test activities are responsible for collecting system configuration information that may be later used, for example, by the operating system to determine that hardware or devices associated with the system are ready for use and to facilitate debugging activities, configuration management activities, etc.
The System Management BIOS (SMBIOS) standard (e.g., SMBIOS 2.3.1) has been widely adopted by many processor system manufacturers and, thus, has been implemented within many commercially available processor systems. In practice, SMBIOS provides data structures (e.g., in the form of tables) that function as a repository of information collected by the BIOS during the boot process (i.e., prior to execution of the operating system) of a processor system. The information collected by the BIOS during the boot process and stored within the SMBIOS data structures includes information or data describing the make up or configuration of the processor system executing the BIOS. Subsequent to the boot process, the data or information stored within the SMBIOS data structures is accessible by the operating system and/or one or more runtime utilities. Accordingly, a system user or other operator of the processor system may access (e.g., may view via a video monitor) such data or information for the purpose of assessing the configuration of a particular computer or processor system, debugging the computer or processor system, etc.
One early execution environment phase that the BIOS typically performs is commonly referred to as the power on self test (POST) phase. During the POST phase, the processor or computer system scans for option or expansion read only memories (ROMs) that may be located on board (e.g., on the motherboard of the processor system) or within a video card, modem card, etc. installed in an expansion slot of the processor system. During the POST phase, the processor system sequentially expands (i.e., loads) and executes the software routines or machine readable instructions stored in these expansion ROMs. In particular, as the BIOS scan detects the presence of a particular expansion ROM, it suspends the scanning process to expand and execute the firmware routines or machine readable instructions stored in that particular expansion ROM before resuming scanning for another expansion ROM.
Each of the expansion ROMs includes one or more routines or sets of machine readable instructions that require an amount of memory space for their execution. The BIOS typically provides such memory space, which is commonly referred to as legacy expansion ROM memory, for use in executing these routines or instructions. As each routine or set of instructions within a particular scanned expansion ROM is expanded and executed, the routine or instructions may consume an initial amount of memory within the legacy expansion ROM memory space and may release (i.e., make available) some or all of that memory space when the execution of the routine or instructions is complete.
Unfortunately, with many known processor systems the legacy expansion ROM memory space is filled during the scanning process before all of the expansion ROMs have had an opportunity to expand (i.e., load their contents into the legacy expansion ROM memory space) and execute. As a result, the processor system may be unable to support requests made during subsequent execution of the expansion ROM scan, which may result in error messages, software execution failures, etc. that require a re-boot of the processor system.
In some processor systems it is possible to determine at runtime (i.e., when the operating system is executing) the amount of memory that is consumed by successfully expanded and executed expansion ROM routines. While such memory consumption information may prove somewhat useful in determining what expansion ROM routines or instructions were loaded into the legacy expansion ROM memory space and executed by the processor system prior to an operating system boot failure and/or error message, such information is incomplete. In particular, information associated with the memory space requirements of expansion ROM routines or instructions that were not expanded (e.g., due to the legacy expansion ROM space being filled) is not available to the operating system. Furthermore, the initial memory space requirements associated with the expansion ROM routines that were successfully loaded is not accessible to the operating system. Thus, in the event of a boot failure, it is difficult, if not impossible, for a system user or operator to determine what combination of available expansion ROMs can be expanded and executed using the relatively limited legacy expansion ROM space. As a result, users often enable/disable various combinations of expansion ROMs using time consuming trial and error methods until the computer system boots without error.